Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Контрольна робота
З курсу
«Алгоритмізація і програмування»
на тему:
«Залежність температури металевого предмету при нагріванні в печі»
Виконав:
ст. гр. АВ-1
Перевірив:
Львів-2008
Завдання: Температура t металевого предмету при нагріванні в печі описується залежністю:
f(t)=50+450*(t-(1-exp(-0.25*t))/0.25)/60-130
Виділення кореня
f(t)=50+450*(t-(1-exp(-0.25*t))/0.25)/60-130
t[-10;-4].
f(-10)=180.4748 f(-4)=-58.4515
Блок-схема алгоритму
SHAPE \* MERGEFORMAT початок
t=100;20;300
f(t)= 50+450*(t-(1-exp(-0.25*t))/0.25)/60-130
друк t, f(t)
кінець
Програма мовою С
//vudilennja_korenja
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float t)
{return 50+450*(t-(1-exp(-0.25*t))/0.25)/60-130;}
main()
{clrscr();
for(float t=-10;t<=-4;t+=0.5)
printf("\n t=%.f f=%6.4f",t,f(t));
getchar();
}
Результат виконання
t=-10.0 f=180.4748
t=-9.5 f=141.2804
t=-9.0 f=107.1321
t=-8.5 f=77.4369
t=-8.0 f=51.6717
t=-7.5 f=29.3746
t=-7.0 f=10.1381
t=-6.5 f=-6.3974
t=-6.0 f=-20.5493
t=-5.5 f=-32.5977
t=-5.0 f=-42.7897
t=-4.5 f=-51.3435
t=-4.0 f=-58.4515
Програма в середовищі MATLAB
Функція-процедура
%fun_t
function y=fun_t(t)
y=50+450*(t-(1-exp(-0.25*t))/0.25)/60-130;
%vud_korin
clear,clc
t=[-10:0.5:-4];
f=fun_t(t);
disp([t(:) f(:)]);
format long;
z=fzero('fun_t',0)
figure(1);
plot(t,f,'k');
xlabel('t');ylabel('f(t)');
grid;
Результат виконання програми
-10.0000 180.4748
-9.5000 141.2804
-9.0000 107.1321
-8.5000 77.4369
-8.0000 51.6717
-7.5000 29.3746
-7.0000 10.1381
-6.5000 -6.3974
-6.0000 -20.5493
-5.5000 -32.5977
-5.0000 -42.7897
-4.5000 -51.3435
-4.0000 -58.4515
z =
-6.70264621763789
Метод половинного ділення
Блок-схема алгоритму
SHAPE \* MERGEFORMAT початок
друк t0, f(t0),k,ε,
|a-b|
кінець
а=-10,b=-4,
k=0,ε=10-4
t0=(a+b)/2
|a-b|>ε
f(a)∙f(t0)>0
a=t0
b=t0
k=k+1
Програма мовою С
//pol_dilennja
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float t)
{return 50+450*(t-(1-exp(-0.25*t))/0.25)/60-130;}
main()
{clrscr();
float a=-10,b=-4,t0,eps=1e-4;
int k=0;
A:t0=(a+b)/2;
if(fabs(a-b)>eps)
{if(f(a)*f(t0)>0) a=t0; else b=t0;
k++; goto A;
}
printf("\n t0=%.7f f(x0)=%.7f",t0,f(t0));
printf(" k=%d eps=%.7f a-b=%.7f",k,eps,fabs(a-b));
getchar();
}
Програма в середовищі MATLAB
%pol_dil
clear;clc
a=-10; b=-4;
k=0; eps=1e-4;
t0=(a+b)/2;
while abs(a-b)>eps
if fun_t(a)*fun_t(t0)>0 a=t0;
else b=t0;
end;
t0=(a+b)/2;
k=k+1;
end;
disp(' t0 ')
disp([ t0 ])
disp(' k ')
disp([ k ])
Метод простих ітерацій
f(t)= 50+450*(t-(1-exp(-0.25*t))/0.25)/60-130
f´(t)=450/60∙[1-(1-e-0.25t ∙(-0.25))/0.25]
φ(t)=t-f(t)∕k , де |k|≥Q∕2
Q=max|f´(t)|
[-10;-4]
|f´(-10)|=387.9748=Q
|f´(-4)|=104.0485
f´(t)<0 => k<0
k=-200
φ(t)=t-50+450*(t-(1-exp(-0.25*t))/0.25)/60-130 ∕ 200
q=max|φ´(t)|
[-10;-4]
φ´(t)=1-450/60∙[1-(1-e-0.25t ∙(-0.25))/0.25] ⁄ (-200)
φ´(-10)=-0.9399; φ´(-4)=0.4798 => q=0.9399 <1
Умова виходу:|t1-t|<∆(1-q)∕q; ε=∆∙(1-q)∕q
Блок-схема алгоритму
SHAPE \* MERGEFORMAT початок
друк t1, f(t1),k,ε,
кінець
а=-10,b=-4,
k=0,∆=10-4
q=0.9399
ε=∆(1-q)∕q
t=(a+b)/2
|x1-x|>ε
t=t1
k=k+1
t1=t-450/60∙[1-(1-e-0.25t ∙(-0.25))/0.25] ⁄ (-200)
Програма мовою С
//prostux_iteracij
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float t)
{return 50+450*(t-(1-exp(-0.25*t))/0.25)/60-130;}
main()
{clrscr();
float a=-10,b=-4,t,t1,det=1e-4,eps=det*(1-0.9399)/0.9399;
int k=0;
t=(a+b)/2;
A:t1=t-450/60*(1-(1-e-0.25t *(-0.25))/0.25) ⁄ (-200);
if(fabs(t1-t)>eps)
{t=t1; k++;...